package com.tengju.user.domain.model.user;

import java.time.LocalDateTime;
import java.util.List;

public interface UserInfoRepository {

    UserInfo getByIdCode(UserIdCode idCode);

    void insertOrUpdateStarInfo(UserIdCode idCode, Integer starRole, Integer starLevel);

    List<UserInfo> batchGetUserInfo(List<UserIdCode> idCodeList);

    List<UserInfo> batchGetUserInfoByUserId(List<UserId> userIdList);

    List<UserInfo> getByMobile(String mobile);

    UserInfo selectByMobile(String mobile);

    UserInfo getByAreaCodeAndMobile(String areaCode,String mobile);

    UserId store(UserInfo userInfo);

    void updateUserInfo(UserInfo userInfo);

    void updateMobile(UserId userId,String mobile);

    void updateAreaCodeAndMobile(UserInfo userInfo);

    UserInfo getByUserId(UserId userId);

    void updateProtocolInfo(UserInfo userInfo);

    void updateNickname(UserId userId,String newName);

    void updateRealName(UserIdCode idCode,String newRealName);

    void updateHeadImage(UserId userId,String headImage);

    List<UserInfo> listAllStarUser();

    List<UserInfo> getAll();

    List<UserInfo> listByStarLevel(StarLevelEnum starLevel,Integer offset,Integer limit);

    List<UserInfo> queryByStarLevel(List<StarLevelEnum> starLevels);

    UserInfo getByUserIdCodeAndStarLevel(UserIdCode userIdCode,StarLevelEnum starLevelEnum);

    int countByStarLevel(List<StarLevelEnum> starLevels);

    int countByStarLevelAndTime(List<StarLevelEnum> starLevels, LocalDateTime timeFrom, LocalDateTime timeTo);

    void deleteByUserId(UserId userId);

    int countByForm(UserQueryForm form);

    List<UserInfo> batchGetByForm(UserQueryForm form);

}
